第25天 - Storage In K8s
K8s 的 node 在本機存放 volume的方式如下列幾種
Empty Dir
:與 pod 同週期的臨時性儲存HostPath
:存放於 Node 的本機目錄Local
:以projected volume 持久卷宗管理的目錄,這個也是明天的大主題這種類型的 volume 和 pod擁有相同的生命週期,當pod進入排程時 volume 也會跟著建立,當pod 銷毀時,volume 也會跟著一起被銷毀(node 上對應的目錄會被銷毀)
pod 使用empty dir
的YAML很簡單,在volume部分加一個emptyDir:{}
即可
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: registry.k8s.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
Hostpath 類型的 volume 用於將 node 的檔案目錄系統或檔案掛載到容器內部做使用,常用於下列幾個場景
hostpath主要需要設定的東西為path
,即宿主機上的目錄或檔案路徑,另有一個參數 type
,可定義路徑類型 (以及遇到路徑不存在的處理方式、應對方式、還是直接視為失敗)
(空值)
:預設值,系統掛載path時不做任何驗證方式DirectoryOrCreate
:path 設定的路徑必須是目錄(directories),若路徑不存在,則系統會自動建立該目錄,並將權限設置為755
,與kubectl 具相同的 owner 和 groupDirectory
:path設定的路徑必須是目錄,否則掛載不成功FileOrCreate
:檔案版本的DirectoryOrCreate
,功能和 DirectoryOrCreate
一樣,但權限設為644
File
:檔案版本的Directory
Socket
/CharDevice
/Block
:path 指定的 UNIX Socket/ charater device/ block service必須存在,否則掛載失敗因為 hostpath 的檔案是是獨立於pod存在node的檔案目錄中的,因此:
type
為 FileOrCreate
且路徑包含上層目錄且目錄又不存在時,系統不會自己創建上層目錄而使pod創建失敗,此時可以先將上層目錄設定為DirectoryOrCreate
,再加上FileOrCreate
就可以避免掉這個問題了!YAML的部分一樣很相似:記得設定path
即可
apiVersion: v1
kind: Pod
metadata:
name: test-webserver
spec:
containers:
- name: test-webserver
image: registry.k8s.io/test-webserver:latest
volumeMounts:
- mountPath: /var/local/aaa
name: mydir
- mountPath: /var/local/aaa/1.txt
name: myfile
volumes:
- name: mydir
hostPath:
# Ensure the file directory is created.
path: /var/local/aaa
type: DirectoryOrCreate
- name: myfile
hostPath:
path: /var/local/aaa/1.txt
type: FileOrCreate
明天就要進入PV囉!